www.gusucode.com > 基于VBLAST-OFDM的MATLAB SIMULATION,图形化界面,并且给出了各仿真图 > 基于VBLAST-OFDM的MATLAB SIMULATION,图形化界面,并且给出了各仿真图/vblast-ofdm simulation/rx_radon_hurwitz.m

    function decoupled_syms = rx_radon_hurwitz(rh_syms, channel_est,SimulationParameters)

n_syms = size(rh_syms,2);

% remove the possible extra symbol
if rem(n_syms,2) ~= 0
   rh_syms(:,n_syms) = [];
   n_syms = n_syms - 1;
end

if (SimulationParameters.TxDiv==0 & SimulationParameters.RxDiv==0)|(SimulationParameters.TxDiv==0 & SimulationParameters.RxDiv==2)| ...
        (SimulationParameters.TxDiv==2 & SimulationParameters.RxDiv==0)|(SimulationParameters.TxDiv==2 & SimulationParameters.RxDiv==2)| ...
        (SimulationParameters.TxDiv==0 & SimulationParameters.RxDiv==4)| ...
        (SimulationParameters.TxDiv==2 & SimulationParameters.RxDiv==4) %1x1,1x2,2x1,2x2,1x4,2x4
    decoupled_syms(:,1:2:n_syms) = repmat(conj(channel_est(:,1)),1, n_syms/2).*rh_syms(:,1:2:n_syms) + ...
        repmat(channel_est(:,2),1,n_syms/2).*conj(rh_syms(:,2:2:n_syms));

    decoupled_syms(:,2:2:n_syms) = repmat(conj(channel_est(:,2)),1, n_syms/2).*rh_syms(:,1:2:n_syms) - ...
        repmat(channel_est(:,1),1,n_syms/2).*conj(rh_syms(:,2:2:n_syms));
elseif (SimulationParameters.TxDiv==4 & SimulationParameters.RxDiv==0)|(SimulationParameters.TxDiv==4 & SimulationParameters.RxDiv==2)| ...
        (SimulationParameters.TxDiv==4 & SimulationParameters.RxDiv==4) %4x1,4x2,4x4

    %make the number of columns a multiple of 8
    while rem(n_syms,8)~=0
        temp=zeros(SimulationParameters.FFTPoints,1);
        rh_syms=[rh_syms temp];
        n_syms=n_syms+1;
    end
   decoupled_syms(:,1:4:n_syms/2)= repmat(conj(channel_est(:,1)),1, n_syms/8).*rh_syms(:,1:8:n_syms) + ...
   repmat(conj(channel_est(:,2)),1, n_syms/8).*rh_syms(:,2:8:n_syms) + repmat(conj(channel_est(:,3)),1, n_syms/8).*rh_syms(:,3:8:n_syms) + ...
   repmat(conj(channel_est(:,4)),1, n_syms/8).*rh_syms(:,4:8:n_syms) + repmat(channel_est(:,1),1,n_syms/8).*conj(rh_syms(:,5:8:n_syms))+ ...
   repmat(channel_est(:,2),1,n_syms/8).*conj(rh_syms(:,6:8:n_syms))+repmat(channel_est(:,3),1,n_syms/8).*conj(rh_syms(:,7:8:n_syms))+ ...
   repmat(channel_est(:,4),1,n_syms/8).*conj(rh_syms(:,8:8:n_syms));
   decoupled_syms(:,2:4:n_syms/2) = repmat(conj(channel_est(:,2)),1, n_syms/8).*rh_syms(:,1:8:n_syms) - ...
   repmat(conj(channel_est(:,1)),1, n_syms/8).*rh_syms(:,2:8:n_syms) - repmat(conj(channel_est(:,4)),1, n_syms/8).*rh_syms(:,3:8:n_syms) + ...
   repmat(conj(channel_est(:,3)),1, n_syms/8).*rh_syms(:,4:8:n_syms) + repmat(channel_est(:,2),1,n_syms/8).*conj(rh_syms(:,5:8:n_syms))- ...
   repmat(channel_est(:,1),1,n_syms/8).*conj(rh_syms(:,6:8:n_syms))-repmat(channel_est(:,4),1,n_syms/8).*conj(rh_syms(:,7:8:n_syms))+ ...
   repmat(channel_est(:,3),1,n_syms/8).*conj(rh_syms(:,8:8:n_syms));

   decoupled_syms(:,3:4:n_syms/2) = repmat(conj(channel_est(:,3)),1, n_syms/8).*rh_syms(:,1:8:n_syms) + ...
   repmat(conj(channel_est(:,4)),1, n_syms/8).*rh_syms(:,2:8:n_syms) - repmat(conj(channel_est(:,1)),1, n_syms/8).*rh_syms(:,3:8:n_syms) - ...
   repmat(conj(channel_est(:,2)),1, n_syms/8).*rh_syms(:,4:8:n_syms) + repmat(channel_est(:,3),1,n_syms/8).*conj(rh_syms(:,5:8:n_syms))+ ...
   repmat(channel_est(:,4),1,n_syms/8).*conj(rh_syms(:,6:8:n_syms))-repmat(channel_est(:,1),1,n_syms/8).*conj(rh_syms(:,7:8:n_syms))- ...
   repmat(channel_est(:,2),1,n_syms/8).*conj(rh_syms(:,8:8:n_syms));
   decoupled_syms(:,4:4:n_syms/2) = repmat(conj(channel_est(:,4)),1, n_syms/8).*(rh_syms(:,1:8:n_syms)) - ...
   repmat(conj(channel_est(:,3)),1, n_syms/8).*rh_syms(:,2:8:n_syms) + repmat(conj(channel_est(:,2)),1, n_syms/8).*rh_syms(:,3:8:n_syms) - ...
   repmat(conj(channel_est(:,1)),1, n_syms/8).*rh_syms(:,4:8:n_syms) + repmat(channel_est(:,4),1,n_syms/8).*conj(rh_syms(:,5:8:n_syms))- ...
   repmat(channel_est(:,3),1,n_syms/8).*conj(rh_syms(:,6:8:n_syms))+repmat(channel_est(:,2),1,n_syms/8).*conj(rh_syms(:,7:8:n_syms))- ...
   repmat(channel_est(:,1),1,n_syms/8).*conj(rh_syms(:,8:8:n_syms));
end